home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / util / gnu / oleo_src.lha / src / kbd.h < prev    next >
C/C++ Source or Header  |  1992-07-27  |  2KB  |  75 lines

  1. /*    Copyright (C) 1990 Free Software Foundation, Inc.
  2.  
  3. This file is part of Oleo, the GNU Spreadsheet.
  4.  
  5. Oleo is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 1, or (at your option)
  8. any later version.
  9.  
  10. Oleo is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with Oleo; see the file COPYING.  If not, write to
  17. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  18.  
  19.  
  20. struct key {
  21.     unsigned char vector;
  22.     unsigned char code;
  23. };
  24.  
  25. /* if Map_Malloc is nonzero, the Keys entry can be realloc'ed and scribbled
  26.    on.  This is used when re-binding keys.
  27.  
  28.    If Map_Dense, there should be only one Keys element, and it applies to
  29.    *all* the values from Lochr to Hichr (this is used to cheaply implement
  30.    self-insert, etc. */
  31.  
  32. /* Map_End marks the end of a keymap, and means that map_next points to
  33.    another keymap to try if it didn't find a match in this one. */
  34.  
  35. struct keymap {
  36.     struct keymap *map_next;
  37.     char map_end;
  38.     char map_dense;
  39.     char map_malloc;
  40.     unsigned char lochr;
  41.     unsigned char hichr;
  42.     struct key *keys;    /* Should really be a variable-sized array,
  43.                     but C doesn't handle them well, so. . . */
  44. };
  45. extern int num_maps;
  46. extern struct keymap **the_maps;
  47.  
  48. struct cmd_func {
  49.     char    *func_name;
  50.     char    *func_args;
  51.     int    func_flags;
  52.     void    (*func_func)();
  53. };
  54.  
  55. extern int num_funcs;
  56. extern struct cmd_func **the_funcs;
  57.  
  58. /* JF: In a keymap, vector!=255 means it's the command in
  59.    the_funcs[vector][code];
  60.    else we switch to keymap the_maps[code]; and read a new char. . .
  61.  
  62.    Note that this means no more than 255 cmd vectors, and no more than
  63.    256 cmds per vector, also no more than 256 keymaps.  These should not be
  64.    serious limitations. . . */
  65.  
  66. #define MAIN_MAP 0
  67. #define META_MAP 1
  68. #define EDIT_MAP 2
  69. #define EDIT_META_MAP 3
  70. #define ANSI_MAP 4
  71. #define DIGIT_MAP 5
  72.  
  73. #define UNBOUND        0
  74.  
  75.